package com.xiaoKe.zhonghzu.global.tool;

import java.util.ArrayList;
import java.util.List;

/**
 * @author zhaoyakun
 * @create 2021/3/20 9:07
 * @description： 环控设备类型枚举
 */
public enum EnumDevType {
    K4("K4", 0, 0,false),
    K8("K8", 1, 0,false),
    K9_5("K9", 2, 0,false),
    K8_V2("K8_V2", 3, 0,false),
    K9P("K9P", 4, 0,false),
    F100("F100", 5, 0,true),
    K9("K9", 6, 0,true),
    K16("K16", 7, 0,true),
    K16PRO("K16Pro", 8, 0,true),
    FX("FutureX", 9, 0,true),
    A1("A1", 10, 1,true),
    A2("A2", 11, 1,false),
    H1("洗消烘干H1", 12, 0,true),
    H2("洗消烘干H2", 13, 0,true),
    P1("正压环控P1", 14, 0,false),
    D1("数字环控D1", 15, 0,true),
    K15("K15", 16, 0,false),
    K19("K19", 17, 0,false),
    F1("风机卫士F1", 18, 0,false),
    yg119("yg119", 19, 1,false),
    S1("S1", 20, 0,true),
    BC_M1("BC-M1", 21, 0,true),
    BC_S1("BC-S1", 22, 0,true),
    F80("F80", 23, 0,true),
    F100PRO("F100-EH", 24, 0,true),
    K6("K6", 25, 0,true),
    K12("K12", 26, 0,false),
    F101("料线F101", 27, 0,true),
    BC_M1_PRO("BC-M1-EH", 28, 0,false),
    BC_S1_PRO("BC-S1-EH", 29, 0,false),
    SCRAP("刮粪", 30, 1,false),
    F201("料线F201", 31, 0,true),
    F301("料线F301", 32, 0,true),
    S1_GC("发电机组采集器", 33, 0,false),
    F80E("F80E", 34, 0,true),
    FD101("播种机FD101", 35, 1,false),
    S1_3G("S1-3G", 36, 0,false),
    DC1_PRO("刮粪DC1Pro", 37, 1,false),
    S1_LONG_DA("S1-LD", 38, 1,false),
    AW100("AW100", 39, 1,false),  // 水线报警器
    M_3G("M-3G", 40, 0,false),
    M_PRO("M-PRO", 41, 0,false),
    M_SE("M-SE", 42, 0,false),
    BH9100("BH9100", 43, 0,false),
    LC50("LC50", 44, 1,false),  // 水线管理系统
    WM100("WM100", 45, 1,false),  // 水线控制器
    S1_HD("S1-HD", 46, 1,false), // S1 海大
    A2_PRO("报警器A2-pro", 47, 0,false), // A2 pro
    M_PLUS("M-PLUS", 48, 0,false), // 蒙特AC2000-PLUS
    M_SG("M-SG", 49, 0,false), // 蒙特Super-Guard
    CS("CS", 50, 0,false), // 鸡秤
    BH9200("BH9200", 51, 0,false), // 大牧人-BH9200
    BH8600("BH8600", 52, 0,false), // 大牧人-BH8600
    C1000("C1000", 53, 0,false), // C1000
    DWC("DWC01", 54, 1,false), // 饮水控制器
    GSI_SL("GSI SL", 55, 1, false), // GSl Swine Lite
    BD300("BD300", 56, 0,false), // A2采集的BD300
    BD700("BD700", 57, 0,false), // A2采集的BD700
    D100("D100", 58, 0,false), // D1000的精简版本
    HR16("HR16", 59, 0,false), // HR16
    D100_NP("D100_NP", 60, 0,false), // D100_NP
    D100_DEO("D100_DEO", 61, 0,false), // D100_DEO
    D20("D20", 200, 0,false), // 喷淋控制器D20
    D20F("D20F", 15, 0,false), // 喷淋控制器D20
    WIRELESS_SENSOR("WS", 400, 0,false), // 无线传感器
    S1_HD_S("Munter-SG", 300, 0,false), // S1 海大子设备 蒙特SG
    FX_NEW("FutureX", 100, 0,true),// 新版Fx


    ZHAN_CHUANG("ZhanChuang", 1000, 0, false), // 展创数据采集
    BI_DA("BiDa", 1001, 0, false), // 必达
    MUNTER("munter", 1002, 0, false), // 蒙特

    UNKNOWN("未知类型", 255,2,false);
    private String devName;
    private int devId;
    // 0环控，1非环控
    private int envcType;
    private boolean aBoolean; //是否适配参数设置

    EnumDevType(String devName, int devId, int envcType, boolean aBoolean) {
        this.devName = devName;
        this.devId = devId;
        this.envcType = envcType;
        this.aBoolean = aBoolean;
    }

    public boolean isaBoolean() {
        return aBoolean;
    }

    public void setaBoolean(boolean aBoolean) {
        this.aBoolean = aBoolean;
    }

    //获取设备类型ID
    public int getDevId() {
        return devId;
    }

    //获取设备类型名称
    public String getDevName() {
        return devName;
    }

    //获取设备环控类型
    public int getEnvcType() {
        return envcType;
    }

    //在switch中使用通常需要先获取枚举类型才判断
    // 因为case中是常量或者int、byte、short、char，写其他代码编译是不通过的
    public static EnumDevType getByDevId(int devId) {
        for (EnumDevType devType : values()) {
            if (devType.getDevId() == devId) {
                return devType;
            }
        }
        return UNKNOWN;
    }

    // 根据环控类型获取设备类型数组
    public static List<EnumDevType> getByEnvcType(int envcType) {
        List<EnumDevType> EnumDevTypes = new ArrayList<>();
        for (EnumDevType devType : values()) {
            if (devType.getEnvcType() == envcType) {
                EnumDevTypes.add(devType);
            }
        }
        return EnumDevTypes;
    }
}
